﻿using System;
using System.IO;

namespace BinaryCode
{
    public static class Program
    {
        public static IBaseInterpreter interpreter;

        public static string ReadCodeFromFile(string file)
        {
            return File.ReadAllText(file);
        }
        /// <summary>
        /// Directly start the Interpreter with the provided Code
        /// </summary>
        /// <param name="code">Binary Code - Compressed</param>
        public static void InterpretCode(string code)
        {
            IBaseInterpreter oneTime = new CompressedInterpreter();
            oneTime.ParseCode(code);
            oneTime.RunCode();
            Console.ReadLine();
        }

        public static void Main(string[] args)
        {
            interpreter = new CompressedInterpreter();
            if (args.Length == 0)
            {
                Console.Error.WriteLine("Code eingabe (unkorrekter Code führt zur erneuten Eingabeaufforderung):");
                string input=string.Empty;
                do
                {
                     input= Console.ReadLine();
                } while (!interpreter.ParseCode(input));
                Console.Error.WriteLine("Starte den Code!");
                
            }

            else
            {
                try
                {
                    Console.WriteLine("Versuche letzten Parameter als Datei zu lesen: {0}", args[args.Length - 1]);
                    interpreter.ParseCode(ReadCodeFromFile(args[args.Length - 1]));
                }
                catch { Console.Error.WriteLine("Fehler!!"); }
            }
            interpreter.RunCode();
            Console.Error.WriteLine("Code Ausführung beendet");
            Console.ReadLine();
            
        }
    }
}
